package com.yuuzy.dao;

import com.alibaba.druid.util.StringUtils;
import com.yuuzy.model.Fund;

import java.util.List;

public class FundDAO extends BasicDAO<Fund> {
    /**
     * 查询基金信息
     *
     * @param fund 基金实体
     * @return 查询到的基金实体集
     */
    public List<Fund> queryFund(Fund fund) {
        StringBuilder sb = new StringBuilder("select * from fund");//查询名称为？的基金在fund表中的信息
        if (!StringUtils.isEmpty(fund.getFund_name())) {
            sb.append(" and fund_name like '%").append(fund.getFund_name()).append("%'");//支持模糊查询
        }
        if (fund.getFund_id() != null) {
            sb.append(" and fund_id =").append(fund.getFund_id());
        }
        String sql = sb.toString().replaceFirst("and", "where");

        return queryMulti(sql, Fund.class);
    }

    /**
     * 增加基金
     *
     * @param fund 增加的基金实体
     * @return 受影响的行数
     */
    public int insertFund(Fund fund) {
        //fund_id自增
        String sql = "INSERT INTO finance.fund(fund_name,fund_type,fund_risklevel,fund_manager,fund_amount,fund_up) VALUES (?,?,?,?,?,?)";//添加基金信息
        return update(sql, fund.getFund_name(), fund.getFund_type(), fund.getFund_risklevel(), fund.getFund_manager(), fund.getFund_amount(), fund.getFund_up());
    }

    /**
     * 删除基金
     *
     * @param fund 待删除的基金实体
     * @return 受影响的行数
     */
    public int deleteFund(Fund fund) {
        StringBuilder sb = new StringBuilder("DELETE FROM fund");//删除id和名称相匹配的基金(两者至少有一个）
        if (!StringUtils.isEmpty(fund.getFund_name())) {
            sb.append(" and fund_name = '").append(fund.getFund_name()).append("'");
        }
        if (fund.getFund_id() != 0) {
            sb.append(" and fund_id = ").append(fund.getFund_id());
        }
        String sql = sb.toString().replaceFirst("and", "where");
        return update(sql);
    }

    /**
     * 更改基金信息
     *
     * @param fund 待更改的基金实体
     * @return 受影响的行数
     */
    public int updateFund(Fund fund) {
        //id不能更改
        StringBuilder sb = new StringBuilder("UPDATE fund SET");
        if (!StringUtils.isEmpty(fund.getFund_name())) {
            //如果名称字段存在
            sb.append(" ,fund_name = '").append(fund.getFund_name()).append("'");
        }
        if (!StringUtils.isEmpty(fund.getFund_type())) {
            //如果类型字段存在
            sb.append(" ,fund_type = '").append(fund.getFund_type()).append("'");
        }
        if (!StringUtils.isEmpty(fund.getFund_risklevel())) {
            //如果风险等级字段存在
            sb.append(" ,fund_risklevel = '").append(fund.getFund_risklevel()).append("'");
        }
        if (fund.getFund_amount() != null) {
            //如果基金金额字段存在
            sb.append(" ,fund_amount = ").append(fund.getFund_amount());
        }
        if (!StringUtils.isEmpty(fund.getFund_manager())) {
            //如果管理者字段存在
            sb.append(" ,fund_manager = '").append(fund.getFund_manager()).append("'");
        }
        if (!StringUtils.isEmpty(fund.getFund_up())) {
            //如果标志位字段存在
            sb.append(" ,fund_up = '").append(fund.getFund_up()).append("'");
        }
        String sql = sb.append(" WHERE fund_id = ").append(fund.getFund_id()).toString().replaceFirst(",", "");
        return update(sql);
    }

    /**
     * 基金上线功能
     *
     * @param fund 待上线的基金实体
     * @return 设置为上线状态的基金实体
     */
    private Fund upFund(Fund fund) {
        fund.setFund_up("1");
        return fund;
    }

    /**
     * 基金下线功能
     *
     * @param fund 待下线的基金实体
     * @return 设置为下线状态的基金实体
     */
    private Fund offFund(Fund fund) {
        fund.setFund_up("0");
        return fund;
    }

    /**
     * 实现基金的上下线功能
     *
     * @param fund 待上线/下线的基金实体
     * @return 已下线/上线的基金实体
     */
    public Fund up_OR_offFund(Fund fund) {
        if (fund.getFund_up().equals("1")) {
            //将上线状态转换为下线状态
            return offFund(fund);
        }
        if (fund.getFund_up().equals("0")) {
            //将下线状态转换为上线状态
            return upFund(fund);
        }
        System.out.println("错误，标志位不正确！");
        return null;
    }
}
